<?xml version="1.0" encoding="UTF-8"?>
<GenerateModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="generateMetaModel_Module.xsd">
    <PythonExport
      Father="PyObjectBase"
      Name="MetadataPy"
      Twin="Metadata"
      TwinPointer="Metadata"
      Include="App/Metadata.h"
      FatherInclude="Base/PyObjectBase.h"
      Namespace="App"
      Constructor="true"
      Delete="true"
      NumberProtocol="false"
      RichCompare="false"
      FatherNamespace="Base">


        <Documentation>
            <Author Licence="LGPL" Name="Chris Hennes" EMail="chennes@pioneerlibrarysystem.org" />
            <UserDocu>App.Metadata class.

A Metadata object reads an XML-formatted package metadata file and provides
read and write access to its contents.

The following constructors are supported:

Metadata()
Empty constructor.

Metadata(metadata)
Copy constructor.
metadata : App.Metadata

Metadata(file)
Reads the XML file and provides access to the metadata it specifies.
file : str
    XML file name.

Metadata(bytes)
Treats the bytes as UTF-8-encoded XML data and provides access to the metadata it specifies.
bytes : bytes
    Python bytes-like object.</UserDocu>
            <DeveloperDocu>Metadata</DeveloperDocu>
        </Documentation>

        <Attribute Name="Name">
            <Documentation>
                <UserDocu>String representing the name of this item.</UserDocu>
            </Documentation>
            <Parameter Name="Name" Type="Object" />
        </Attribute>
        <Attribute Name="Version">
            <Documentation>
                <UserDocu>String representing the version of this item in semantic triplet format.</UserDocu>
            </Documentation>
            <Parameter Name="Version" Type="Object" />
        </Attribute>
        <Attribute Name="Date">
            <Documentation>
                <UserDocu>String representing the date of this item in YYYY-MM-DD format (format not currently programmatically enforced)</UserDocu>
            </Documentation>
            <Parameter Name="Date" Type="Object" />
        </Attribute>
        <Attribute Name="Type">
            <Documentation>
                <UserDocu>String representing the type of this item (text only, no markup allowed).</UserDocu>
            </Documentation>
            <Parameter Name="Type" Type="Object" />
        </Attribute>
        <Attribute Name="Description">
            <Documentation>
                <UserDocu>String representing the description of this item (text only, no markup allowed).</UserDocu>
            </Documentation>
            <Parameter Name="Description" Type="Object" />
        </Attribute>
        <Attribute Name="Maintainer">
            <Documentation>
                <UserDocu>List of maintainer objects with 'name' and 'email' string attributes.</UserDocu>
            </Documentation>
            <Parameter Name="Maintainer" Type="Object" />
        </Attribute>
        <Attribute Name="License">
            <Documentation>
                <UserDocu>List of applicable licenses as objects with 'name' and 'file' string attributes.</UserDocu>
            </Documentation>
            <Parameter Name="License" Type="Object" />
        </Attribute>
        <Attribute Name="Urls">
            <Documentation>
                <UserDocu>List of URLs as objects with 'location' and 'type' string attributes, where type
is one of:
* website
* repository
* bugtracker
* readme
* documentation</UserDocu>
            </Documentation>
            <Parameter Name="Urls" Type="Object" />
        </Attribute>
        <Attribute Name="Author">
            <Documentation>
                <UserDocu>List of author objects, each with a 'name' and a (potentially empty) 'email'
string attribute.</UserDocu>
            </Documentation>
            <Parameter Name="Author" Type="Object" />
        </Attribute>
        <Attribute Name="Depend">
            <Documentation>
                <UserDocu>List of dependencies, as objects with the following attributes:
* package
    Required. Must exactly match the contents of the 'name' element in the
    referenced package's package.xml file.
* version_lt
    Optional. The dependency to the package is restricted to versions less than
    the stated version number.
* version_lte
    Optional. The dependency to the package is restricted to versions less or
    equal than the stated version number.
* version_eq
    Optional. The dependency to the package is restricted to a version equal
    than the stated version number.
* version_gte
    Optional. The dependency to the package is restricted to versions greater
    or equal than the stated version number.
* version_gt
    Optional. The dependency to the package is restricted to versions greater
    than the stated version number.
* condition
    Optional. Conditional expression as documented in REP149.</UserDocu>
            </Documentation>
            <Parameter Name="Depend" Type="Object" />
        </Attribute>
        <Attribute Name="Conflict">
            <Documentation>
                <UserDocu>List of conflicts, format identical to dependencies.</UserDocu>
            </Documentation>
            <Parameter Name="Conflict" Type="Object" />
        </Attribute>
        <Attribute Name="Replace">
            <Documentation>
                <UserDocu>List of things this item is considered by its author to replace. The format is
identical to dependencies.</UserDocu>
            </Documentation>
            <Parameter Name="Replace" Type="Object" />
        </Attribute>
        <Attribute Name="Tag">
            <Documentation>
                <UserDocu>List of strings.</UserDocu>
            </Documentation>
            <Parameter Name="Tag" Type="Object" />
        </Attribute>
        <Attribute Name="Icon">
            <Documentation>
                <UserDocu>Relative path to an icon file.</UserDocu>
            </Documentation>
            <Parameter Name="Icon" Type="Object" />
        </Attribute>
        <Attribute Name="Classname">
            <Documentation>
                <UserDocu>String representing the name of the main Python class this item
creates/represents.</UserDocu>
            </Documentation>
            <Parameter Name="Classname" Type="Object" />
        </Attribute>
        <Attribute Name="Subdirectory">
            <Documentation>
                <UserDocu>String representing the name of the subdirectory this content item is located in.
If empty, the item is in a directory named the same as the content item.</UserDocu>
            </Documentation>
            <Parameter Name="Subdirectory" Type="Object" />
        </Attribute>
        <Attribute Name="File">
            <Documentation>
                <UserDocu>List of files associated with this item.
The meaning of each file is implementation-defined.</UserDocu>
            </Documentation>
            <Parameter Name="File" Type="Object" />
        </Attribute>
        <Attribute Name="Content">
            <Documentation>
                <UserDocu>Dictionary of lists of content items: defined recursively, each item is itself
a Metadata object.
See package.xml file format documentation for details.</UserDocu>
            </Documentation>
            <Parameter Name="Content" Type="Object" />
        </Attribute>

        <Attribute Name="FreeCADMin">
            <Documentation>
                <UserDocu>String representing the minimum version of FreeCAD needed for this item.
If unset it will be 0.0.0.</UserDocu>
            </Documentation>
            <Parameter Name="FreeCADMin" Type="Object" />
        </Attribute>

        <Attribute Name="FreeCADMax">
            <Documentation>
                <UserDocu>String representing the maximum version of FreeCAD needed for this item.
If unset it will be 0.0.0.</UserDocu>
            </Documentation>
            <Parameter Name="FreeCADMax" Type="Object" />
        </Attribute>

        <Attribute Name="PythonMin">
            <Documentation>
                <UserDocu>String representing the minimum version of Python needed for this item.
If unset it will be 0.0.0.</UserDocu>
            </Documentation>
            <Parameter Name="PythonMin" Type="Object" />
        </Attribute>

        <Methode Name="getLastSupportedFreeCADVersion">
            <Documentation>
                <UserDocu>getLastSupportedFreeCADVersion() -> str or None

Search through all content package items, and determine if a maximum supported
version of FreeCAD is set.
Returns None if no maximum version is set, or if *any* content item fails to
provide a maximum version (implying that that content item will work with all
known versions).</UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="getFirstSupportedFreeCADVersion">
            <Documentation>
                <UserDocu>getFirstSupportedFreeCADVersion() -> str or None

Search through all content package items, and determine if a minimum supported
version of FreeCAD is set.
Returns 0.0 if no minimum version is set, or if *any* content item fails to
provide a minimum version (implying that that content item will work with all
known versions. Technically limited to 0.20 as the lowest known version since
the metadata standard was added then).</UserDocu>
            </Documentation>
        </Methode>

    <Methode Name="supportsCurrentFreeCAD">
      <Documentation>
        <UserDocu>supportsCurrentFreeCAD() -> bool

Returns False if this metadata object directly indicates that it does not
support the current version of FreeCAD, or True if it makes no indication, or
specifically indicates that it does support the current version. Does not
recurse into Content items.</UserDocu>
      </Documentation>
    </Methode>

        <Methode Name="getGenericMetadata">
            <Documentation>
                <UserDocu>getGenericMetadata(name) -> list

Get the list of GenericMetadata objects with key 'name'.
Generic metadata objects are Python objects with a string 'contents' and a
dictionary of strings, 'attributes'. They represent unrecognized simple XML tags
in the metadata file.</UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addContentItem">
            <Documentation>
                <UserDocu>addContentItem(content_type,metadata)

Add a new content item of type 'content_type' with metadata 'metadata'. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeContentItem">
            <Documentation>
                <UserDocu>removeContentItem(content_type,name)

Remove the content item of type 'content_type' with name 'name'. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addMaintainer">
            <Documentation>
                <UserDocu>addMaintainer(name, email)

Add a new Maintainer. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeMaintainer">
            <Documentation>
                <UserDocu>removeMaintainer(name, email)

Remove the Maintainer. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addLicense">
            <Documentation>
                <UserDocu>addLicense(short_code,path)

Add a new License. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeLicense">
            <Documentation>
                <UserDocu>removeLicense(short_code)

Remove the License. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addUrl">
            <Documentation>
                <UserDocu>addUrl(url_type,url,branch)

Add a new Url or type 'url_type' (which should be one of 'repository', 'readme',

'bugtracker', 'documentation', or 'webpage') If type is 'repository' you

must also specify the 'branch' parameter. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeUrl">
            <Documentation>
                <UserDocu>removeUrl(url_type,url)

Remove the Url. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addAuthor">
            <Documentation>
                <UserDocu>addAuthor(name, email)

Add a new Author with name 'name', and optionally email 'email'. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeAuthor">
            <Documentation>
                <UserDocu>removeAuthor(name, email)

Remove the Author. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addDepend">
            <Documentation>
                <UserDocu>addDepend(name, kind, optional)

Add a new Dependency on package 'name' of kind 'kind' (optional, one of 'auto' (the default),

'internal', 'addon', or 'python'). </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeDepend">
            <Documentation>
                <UserDocu>removeDepend(name, kind)

Remove the Dependency on package 'name' of kind 'kind' (optional - if unspecified any

matching name is removed). </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addConflict">
            <Documentation>
                <UserDocu>addConflict(name, kind)

Add a new Conflict. See documentation for addDepend(). </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeConflict">
            <Documentation>
                <UserDocu>removeConflict(name, kind)

Remove the Conflict. See documentation for removeDepend().</UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addReplace">
            <Documentation>
                <UserDocu>addReplace(name)

Add a new Replace. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeReplace">
            <Documentation>
                <UserDocu>removeReplace(name)

Remove the Replace. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addTag">
            <Documentation>
                <UserDocu>addTag(tag)

Add a new Tag. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeTag">
            <Documentation>
                <UserDocu>removeTag(tag)

Remove the Tag. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="addFile">
            <Documentation>
                <UserDocu>addFile(filename)

Add a new File. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="removeFile">
            <Documentation>
                <UserDocu>removeFile(filename)

Remove the File. </UserDocu>
            </Documentation>
        </Methode>

        <Methode Name="write">
            <Documentation>
                <UserDocu>write(filename)

Write the metadata to the given file as XML data.</UserDocu>
            </Documentation>
        </Methode>

        <ClassDeclarations>
            public:
            MetadataPy(const Metadata &amp; pla, PyTypeObject *T = &amp;Type)
            :PyObjectBase(new Metadata(pla),T){}
            Metadata value() const
            { return *(getMetadataPtr()); }
        </ClassDeclarations>
    </PythonExport>
</GenerateModel>
